home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Amiga
/
World of Amiga.iso
/
archive
/
assembly
/
dis.lha
/
dis.s
< prev
next >
Wrap
Text File
|
1993-05-19
|
36KB
|
2,919 lines
;The longword 'POINTER' points to where to start disassembling, and
;text output comes to a block called 'LINE'.
;It disassembles only one line of code ay each call to 'DISASSEMBLER'.
;It does not support anything higher than 68000...
;-------------------------------------------------------------------------
; Disassembler by Morten Amundsen (mortena@ifi.uio.no)
;-------------------------------------------------------------------------
section Program,code
;-- Macros ---------------------------------------------------------------
GETWORD: MACRO
moveq #0,d0
move.w (a6)+,d0
ENDM
;-------------------------------------------------------------------------
GETLONG: MACRO
move.l (a6)+,d0
ENDM
;-------------------------------------------------------------------------
FILL: MACRO
lea \1,a0
LOOP\@1: move.b (a0)+,(a5)+
bne.s LOOP\@1
lea -1(a5),a5
ENDM
;-------------------------------------------------------------------------
CHAR: MACRO
move.b #\1,(a5)+
ENDM
;-------------------------------------------------------------------------
SOURCE: MACRO
move.w CODE,d0
move.w d0,d1
and.w #%0000000000111000,d0 ; Mode
lsr.w #3,d0
and.w #%0000000000000111,d1 ; Register
bsr.l MODEREGISTER
ENDM
;-------------------------------------------------------------------------
DESTINATION: MACRO
move.w CODE,d0
move.w d0,d1
and.w #%0000000111000000,d0 ; Mode
lsr.w #6,d0
and.w #%0000111000000000,d1 ; Register
rol.w #7,d1
bsr.l MODEREGISTER
ENDM
;-------------------------------------------------------------------------
DATAREG: MACRO
lea DATAS,a0
lsl.w #1,d1
lea (a0,d1.w),a0
move.b (a0)+,(a5)+
move.b (a0),(a5)+
ENDM
;-------------------------------------------------------------------------
ADDRESSREG: MACRO
lea ADDS,a0
lsl.w #1,d1
lea (a0,d1.w),a0
move.b (a0)+,(a5)+
move.b (a0),(a5)+
ENDM
;-------------------------------------------------------------------------
NIL: equ $00
TAB: equ $09
LF: equ $0a
SPC: equ $20
;-------------------------------------------------------------------------
S:
jsr DISASSEMBLE
rts
DISASSEMBLE:
movem.l d0-d7/a0-a6,-(a7)
move.l POINTER,a6
bsr.s CLRLINE
lea LINE,a5
GETWORD
move.w d0,CODE
and.w #$f000,d0
rol.w #6,d0
lea GROUPS,a0
lea (a0,d0.w),a0
move.l (a0),a0
jsr (a0)
move.l a6,POINTER
movem.l (a7)+,d0-d7/a0-a6
rts
;-------------------------------------------------------------------------
CLRLINE:
lea LINE,a0
move.w #79,d7
CLRLOOP:
clr.b (a0)+
dbf d7,CLRLOOP
rts
;-------------------------------------------------------------------------
NONE:
cmp.b #TAB,-(a5)
bne.s NONE
lea 1(a5),a5
lea (a5),a0
move.w #39,d7
SAFETY: clr.b (a0)+
dbf d7,SAFETY
FILL DECLARE
CHAR TAB
move.w CODE,d0
bsr.w WORD2TEXT
CHAR LF
rts
;=========================================================================
BMMI:
move.w CODE,d0
and.w #%0000111100000000,d0 ; ori
beq.w ORII
cmp.w #%0000100000000000,d0
beq.w BITSS
cmp.w #%0000001000000000,d0
beq.w ANDII
cmp.w #%0000010000000000,d0
beq.w SUBII
cmp.w #%0000011000000000,d0
beq.w ADDII
cmp.w #%0000101000000000,d0
beq.w EORII
cmp.w #%0000110000000000,d0
beq.w CMPII
cmp.w #%0000111000000000,d0
beq.w MOVESI
btst #8,d0
bne.s BITSD
bra.w NONE
;-------------------------------------------------------------------------
BITSD:
move.w CODE,d0
and.w #%0000000000111000,d0
cmp.w #%0000000000001000,d0
beq.w MOVEPI
move.w CODE,d0
and.w #%0000000011000000,d0
lsr.w #4,d0
lea BTST,a0
lea (a0,d0.w),a0
move.b (a0)+,(a5)+
move.b (a0)+,(a5)+
move.b (a0)+,(a5)+
move.b (a0),(a5)+
CHAR TAB
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
BITSS:
move.w CODE,d0
and.w #%0000000011000000,d0
lsr.w #4,d0
lea BTST,a0
lea (a0,d0.w),a0
move.b (a0)+,(a5)+
move.b (a0)+,(a5)+
move.b (a0)+,(a5)+
move.b (a0),(a5)+
CHAR TAB
CHAR "#"
GETWORD
bsr.l WORD2TEXT
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
MOVEPI:
FILL MOVEP
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
btst #7,d0
beq.s MPM2R
MPR2M:
move.w d0,d1
and.w #%0000111000000000,d1
rol.w #7,d1
DATAREG
CHAR ","
GETWORD
bsr.w WORD2TEXT
CHAR "("
move.w CODE,d0
move.w d0,d1
and.w #%0000000000000111,d1
ADDRESSREG
CHAR ")"
CHAR LF
rts
MPM2R:
GETWORD
bsr.w WORD2TEXT
CHAR "("
move.w CODE,d0
move.w d0,d1
and.w #%0000000000000111,d1
ADDRESSREG
CHAR ")"
CHAR ","
move.w d0,d1
and.w #%0000111000000000,d1
rol.w #7,d1
DATAREG
CHAR LF
rts
;-------------------------------------------------------------------------
ORII: ; ORI
FILL OR
bra.s IMMCAT0
ANDII:
FILL AND
bra.s IMMCAT0
SUBII:
FILL SUB
bra.s IMMCAT0
ADDII:
FILL ADD
bra.s IMMCAT0
EORII:
FILL EOR
bra.s IMMCAT0
CMPII:
FILL CMP
bra.s IMMCAT0
MOVESI:
FILL MOVES
bra.w IMMCAT0
;-----------------------------------------------------------------------
IMMCAT0:
move.w CODE,d0
move.w d0,d1
and.w #%0000000011000000,d1
cmp.w #%0000000011000000,d1 ; Hmmm...
beq.w NONE
bsr.w GETSIZE
CHAR TAB
lsr.w #1,d1
CHAR "#"
bsr.s IMMVALUE
CHAR ","
moveq #0,d0
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
IMMVALUE:
cmp.w #2,d1
beq.s VALLONG
VALWORD:
GETWORD
bsr.l WORD2TEXT
rts
VALLONG:
GETLONG
bsr.l LONG2TEXT
rts
;=========================================================================
MOVEI: ; MOVE.B/MOVE.W/MOVE.L
FILL MOVE
lsr.w #2,d0
cmp.w #1,d0
beq.s MOVEB
cmp.w #2,d0
beq.s MOVEL
MOVEW:
FILL WORD
clr.w SIZE
bra.s MOVEMODES
MOVEB:
FILL BYTE
clr.w SIZE
bra.s MOVEMODES
MOVEL:
FILL LONG
move.w #1,SIZE
MOVEMODES:
CHAR TAB
clr.w ISC
SOURCE
CHAR ","
move.w #1,ISC
DESTINATION
CHAR LF
rts
;=========================================================================
BCCI: ; Bcc
CHAR "b"
move.w CODE,d0
and.w #%0000111100000000,d0
lsr.w #7,d0
lea BRANCHES,a0
lea (a0,d0.w),a0
move.b (a0)+,(a5)+
move.b (a0),(a5)+
CHAR "."
move.w CODE,d0
and.w #$00ff,d0
beq.s DIS16
DIS8:
CHAR "s"
CHAR TAB
ext.w d0
ext.l d0
add.l a6,d0
bsr.w LONG2TEXT
CHAR LF
rts
DIS16:
CHAR "l"
CHAR TAB
GETWORD
ext.l d0
add.l a6,d0
subq.l #$2,d0
bsr.w LONG2TEXT
CHAR LF
rts
;=========================================================================
MOVEQI: ; MOVEQ
FILL MOVEQ
CHAR TAB
CHAR "#"
move.w CODE,d0
and.w #$00ff,d0
bsr.w BYTE2TEXT
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
lsr.w #8,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;=========================================================================
SHIFTI: ; ROR/ROL/LSL/LSR/etc
move.w CODE,d0 ; (All shifting instr.)
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0 ; Memory-form or
beq.w MEMFORM ; Register-form shifting...
REGFORM:
move.w CODE,d0
move.w d0,d1
and.w #%0000000000011000,d0
and.w #%0000000100000000,d1
lsr.w #6,d1
or.w d1,d0
lea SHIFTS,a0
move.l (a0,d0.w),a0
FILL (a0)
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
btst #5,d0
beq.s IDATA
REGNUM:
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
bra.s SHFTD
IDATA:
CHAR "#"
and.w #%0000111000000000,d0
rol.w #7,d0
bsr.w WORD2TEXT
SHFTD:
CHAR ","
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;-------------------------------------------------------------------------
MEMFORM:
move.w CODE,d0
and.w #%0000011100000000,d0
lsr.w #6,d0
lea SHIFTS,a0
move.l (a0,d0.w),a0
FILL (a0)
CHAR "."
CHAR "w"
CHAR TAB
SOURCE
CHAR LF
rts
;=========================================================================
LINEAI: ; LINE_A
FILL LINEA
bra.s LINECOMP
LINEFI: ; LINE_F
FILL LINEF
LINECOMP:
CHAR TAB
CHAR "#"
move.w CODE,d0
and.w #$0fff,d0
bsr.w WORD2TEXT
CHAR LF
rts
;=========================================================================
ADDINS:
move.w CODE,d0
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0
beq.w ADDAI
move.w CODE,d0
and.w #%0000000100110000,d0
cmp.w #%0000000100000000,d0
beq.w ADDXI
ADDING: ; ADD
FILL ADD
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
btst #8,d0
beq.s ADDMEM2D
ADDD2MEM:
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
ADDMEM2D:
move.w CODE,d0
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
ADDXI: ; ADDX
FILL ADDX
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
btst #3,d0
beq.s DATAXA
ADDRX:
CHAR "-"
CHAR "("
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR ","
CHAR "-"
CHAR "("
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR LF
rts
;------------------------------------------------------------------------
DATAXA:
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
ADDAI: ; ADDA
FILL ADD
CHAR "."
move.w CODE,d0
btst #8,d0
beq.s ADDAW
ADDAL:
CHAR "l"
bra.s ADDAC
ADDAW:
CHAR "w"
ADDAC:
CHAR TAB
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;=========================================================================
SUBINS:
move.w CODE,d0
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0
beq.w SUBAI
move.w CODE,d0
and.w #%0000000100110000,d0
cmp.w #%0000000100000000,d0
beq.w SUBXI
SUBING: ; SUB
FILL SUB
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
btst #8,d0
beq.s SUBMEM2D
SUBD2MEM:
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
SUBMEM2D:
move.w CODE,d0
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
SUBXI: ; SUBX
FILL SUBX
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
btst #3,d0
beq.s DATAXS
SUBAX:
CHAR "-"
CHAR "("
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR ","
CHAR "-"
CHAR "("
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR LF
rts
;------------------------------------------------------------------------
DATAXS:
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
SUBAI: ; SUBA
FILL SUB
CHAR "."
move.w CODE,d0
btst #8,d0
beq.s SUBAW
SUBAL:
CHAR "l"
bra.s SUBAC
SUBAW:
CHAR "w"
SUBAC:
CHAR TAB
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;=========================================================================
ASSDB: ; ADDQ/SUBQ/Scc/DBcc
move.w CODE,d0
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0
beq.s SDBRANCH
move.w CODE,d0
btst #8,d0
beq.s ADDQI
SUBQI: ; SUBQ
FILL SUBQ
bra.s ADDSUBQ
ADDQI:
FILL ADDQ ; ADDQ
ADDSUBQ:
bsr.w GETSIZE
CHAR TAB
CHAR "#"
and.w #%0000111000000000,d0
rol.w #7,d0
bsr.w BYTE2TEXT
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
SDBRANCH:
move.w CODE,d0
and.w #%0000000000111000,d0
cmp.w #%0000000000001000,d0
beq.s DBCCI
SCCI: ; Scc
CHAR "s"
bra.s CBRA
DBCCI: ; DBcc
CHAR "d"
CHAR "b"
CBRA:
move.w CODE,d0
and.w #%0000111100000000,d0
cmp.w #%0000000100000000,d0
bgt.s JUMPB
tst.w d0
bne.s BRAF
CHAR "t"
bra.s DONEB
BRAF:
CHAR "f"
bra.s DONEB
JUMPB:
lsr.w #7,d0
lea BRANCHES,a0
lea (a0,d0.w),a0
move.b (a0)+,(a5)+
move.b (a0),(a5)+
DONEB:
CHAR TAB
move.w CODE,d0
and.w #%0000000000111000,d0
cmp.w #%0000000000001000,d0
beq.s DBCCI2
SCCI2:
move.w CODE,d0
SOURCE
CHAR LF
rts
DBCCI2:
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
GETWORD
add.l a6,d0
subq.l #$2,d0
bsr.w LONG2TEXT
CHAR LF
rts
;=========================================================================
CMPEOR:
move.w CODE,d0
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0
beq.w CMPAI
move.w CODE,d0
btst #8,d0
beq.w CMPINS
and.w #%0000000000111000,d0
cmp.w #%0000000000001000,d0
beq.s CMPMI
EORINS: ; EOR
FILL EOR
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;----------------------------------------------------------------------
CMPMI: ; CMPM
FILL CMPM
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
CHAR "("
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR "+"
CHAR ","
CHAR "("
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR "+"
CHAR LF
rts
;-------------------------------------------------------------------------
CMPAI: ; CMPA
FILL CMP
move.w CODE,d0
CHAR "."
CHAR "w"
clr.w SIZE
btst #8,d0
beq.s CMPAOK
move.w #1,SIZE
lea -1(a5),a5
CHAR "l"
CMPAOK:
CHAR TAB
clr.w ISC
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;-------------------------------------------------------------------------
CMPINS: ; CMP
FILL CMP
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;=========================================================================
ORDIS:
move.w CODE,d0
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0
beq.w DIVI
move.w CODE,d0
and.w #%0000000111110000,d0
cmp.w #%0000000100000000,d0
beq.w SBCDI
ORI: ; OR
FILL OR
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
btst #8,d0
beq.s ORMEM2D
ORD2MEM:
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
ORMEM2D:
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;-------------------------------------------------------------------------
SBCDI: ; SBCD
FILL SBCD
CHAR TAB
move.w CODE,d0
btst #3,d0
beq.s SBCDDAT
SBCDADD:
CHAR "-"
CHAR "("
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR ","
CHAR "-"
CHAR "("
move.w CODE,d1
and.w #%0000111000000000,d1
rol.w #7,d1
ADDRESSREG
CHAR ")"
CHAR LF
rts
SBCDDAT:
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d1
and.w #%0000111000000000,d1
rol.w #7,d1
DATAREG
CHAR LF
rts
;------------------------------------------------------------------------
DIVI: ; DIVS/DIVU
FILL DIV
CHAR "u"
move.w CODE,d0
btst #8,d0
beq.s OKDIV
lea -1(a5),a5
CHAR "s"
OKDIV:
CHAR TAB
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;=========================================================================
AMAE:
move.w CODE,d0
and.w #%0000000011000000,d0
cmp.w #%0000000011000000,d0
beq.w MULI
move.w CODE,d0
and.w #%0000000011110000,d0
beq.w ABCDI
move.w CODE,d0
and.w #%0000000111111000,d0
cmp.w #%0000000101000000,d0
beq.w EXGDD
cmp.w #%0000000101001000,d0
beq.w EXGAA
cmp.w #%0000000110000000,d0
beq.w EXGDA
ANDINS:
FILL AND
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
btst #8,d0
beq.s ANDMEM2D
ANDD2MEM:
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
ANDMEM2D:
move.w CODE,d0
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
EXGDD:
FILL EXG
CHAR TAB
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
EXGAA:
FILL EXG
CHAR TAB
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;--------------------------------------------------------------------------
EXGDA:
FILL EXG
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;--------------------------------------------------------------------------
ABCDI:
FILL ABCD
CHAR TAB
move.w CODE,d0
btst #3,d0
beq.s ABCDDAT
ABCDADD:
CHAR "-"
CHAR "("
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ")"
CHAR ","
CHAR "-"
CHAR "("
move.w CODE,d1
and.w #%0000111000000000,d1
rol.w #7,d1
ADDRESSREG
CHAR ")"
CHAR LF
rts
ABCDDAT:
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR ","
move.w CODE,d1
and.w #%0000111000000000,d1
rol.w #7,d1
DATAREG
CHAR LF
rts
;--------------------------------------------------------------------------
MULI:
FILL MUL
move.w CODE,d0
CHAR "u"
btst #8,d0
beq.s OKMUL
lea -1(a5),a5
CHAR "s"
OKMUL:
CHAR TAB
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;=========================================================================
MISC:
move.w CODE,d0
cmp.w #$4e70,d0
beq.w RESETI
cmp.w #$4e71,d0
beq.w NOPI
cmp.w #$4e72,d0
beq.w STOPI
cmp.w #$4e73,d0
beq.w RTEI
cmp.w #$4e74,d0
beq.w RTDI
cmp.w #$4e75,d0
beq.w RTSI
cmp.w #$4e76,d0
beq.w TRAPVI
cmp.w #$4e77,d0
beq.w RTRI
cmp.w #$4afc,d0
beq.w ILLEGALI
move.w CODE,d0
and.w #%0000111111111110,d1
cmp.w #%0000111001111010,d1
beq.w MOVECI
;---
move.w d0,d1
and.w #%0000111111111000,d1
cmp.w #%0000100001000000,d1
beq.w SWAPI
cmp.w #%0000100010000000,d1
beq.w EXTWI
cmp.w #%0000100011000000,d1
beq.w EXTLI
cmp.w #%0000111001100000,d1
beq.w TOUSPI
cmp.w #%0000111001101000,d1
beq.w FROMUSPI
;---
move.w d0,d1
and.w #%0000111111110000,d1
cmp.w #%0000111001010000,d1
beq.w LINKI
;---
move.w d0,d1
and.w #%0000111111000000,d1
cmp.w #%0000111010000000,d1
beq.w JSRI
cmp.w #%0000111011000000,d1
beq.w JMPI
cmp.w #%0000111001000000,d1
beq.w TRAPI
cmp.w #%0000100001000000,d1
beq.w PEAI
cmp.w #%0000100000000000,d1
beq.w NBCDI
cmp.w #%0000101011000000,d1
beq.w TASI
;---
move.w d0,d1
and.w #%0000111110000000,d1
cmp.w #%0000100010000000,d1
beq.s MOVMEA
cmp.w #%0000110010000000,d1
beq.w MOVMREG
;---
move.w d0,d1
and.w #%0000111100000000,d1
cmp.w #%0000101000000000,d1
beq.w TSTI
cmp.w #%0000000000000000,d1
beq.w FROMSRI
cmp.w #%0000011000000000,d1
beq.w TOSRI
cmp.w #%0000001000000000,d1
beq.w FROMCCRI
cmp.w #%0000010000000000,d1
beq.w TOCCRI
move.w d0,d1
and.w #%0000000111000000,d1
cmp.w #%0000000111000000,d1
beq.w LEAI
cmp.w #%0000000110000000,d1
beq.w CHKI
bra.l NONE
;-------------------------------------------------------------------------
MOVMEA:
FILL MOVEM
CHAR "."
CHAR "w"
move.w CODE,d0
btst #6,d0
beq.s OKME
lea -1(a5),a5
CHAR "l"
OKME:
CHAR TAB
GETWORD
move.w d0,SET
move.w CODE,d0
and.w #%0000000000111000,d0
cmp.w #%0000000000100000,d0
bne.s OKSET
bsr.w REVSET
OKSET:
bsr.w REGISTERS
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
;-----------------------------------------------------------------------
MOVMREG:
FILL MOVEM
CHAR "."
CHAR "w"
move.w CODE,d0
btst #6,d0
beq.s OKMR
lea -1(a5),a5
CHAR "l"
OKMR:
CHAR TAB
GETWORD
move.w d0,SET
move.w CODE,d0
SOURCE
CHAR ","
bsr.s REGISTERS
CHAR LF
rts
;-------------------------------------------------------------------------
REGISTERS:
move.w SET,d0
lea DATAS,a0
moveq #0,d7
REGLOOP:
btst d7,d0
beq.s NXT
move.b (a0),(a5)+
move.b 1(a0),(a5)+
CHAR "/"
NXT: lea 2(a0),a0
addq.w #1,d7
cmp.w #$10,d7
bne.s REGLOOP
lea -1(a5),a5
rts
;-------------------------------------------------------------------------
REVSET:
move.w SET,d0
moveq #0,d1
moveq #0,d6
move.w #15,d7
REVLOOP:
btst d7,d0
beq.s NEXTREG
bset d6,d1
NEXTREG:
addq.w #1,d6
dbf d7,REVLOOP
move.w d1,SET
rts
;-------------------------------------------------------------------------
MOVECI:
FILL MOVEC
CHAR TAB
move.w CODE,d0
btst #0,d0
beq.s CSRC
CDST:
GETWORD
bsr.s REGISTER
CHAR ","
bsr.s CONTROL
CHAR LF
rts
;----
CSRC:
GETWORD
bsr.s CONTROL
CHAR ","
bsr.s REGISTER
CHAR LF
rts
;-----------------
CONTROL:
move.w d0,d2
and.w #%0000111111111111,d2
tst.w d2
beq.s SFCI
cmp.w #$1,d2
beq.s DFCI
cmp.w #$800,d2
beq.s USPI
cmp.w #$801,d2
beq.s VBRI
rts
;--------------
SFCI:
CHAR "s"
CHAR "f"
CHAR "c"
rts
DFCI:
CHAR "d"
CHAR "f"
CHAR "c"
rts
USPI:
CHAR "u"
CHAR "s"
CHAR "p"
rts
VBRI:
CHAR "v"
CHAR "b"
CHAR "r"
rts
;-----------------
REGISTER:
move.w d0,d2
and.w #%0111000000000000,d0
rol.w #4,d0
move.w d0,d1
btst #15,d2
bne.s AREG
DREG:
DATAREG
move.w d2,d0
rts
AREG:
ADDRESSREG
move.w d2,d0
rts
;-------------------------------------------------------------------------
TASI:
FILL TAS
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
TSTI:
FILL TST
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
NBCDI:
FILL NBCD
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
PEAI:
FILL PEA
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
TOUSPI:
FILL MOVE
CHAR "."
CHAR "l"
CHAR TAB
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ","
CHAR "u"
CHAR "s"
CHAR "p"
CHAR LF
rts
;-------------------------------------------------------------------------
FROMUSPI:
FILL MOVE
CHAR "."
CHAR "l"
CHAR TAB
CHAR "u"
CHAR "s"
CHAR "p"
CHAR ","
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;-------------------------------------------------------------------------
SWAPI:
FILL SWAP
bra.s ESREG
EXTWI:
FILL EXTW
bra.s ESREG
EXTLI:
FILL EXTL
ESREG:
CHAR TAB
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;-------------------------------------------------------------------------
LEAI:
FILL LEA
CHAR TAB
move.w CODE,d0
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;-------------------------------------------------------------------------
CHKI:
FILL CHK
CHAR TAB
move.w CODE,d0
SOURCE
CHAR ","
move.w CODE,d0
and.w #%0000111000000000,d0
rol.w #7,d0
move.w d0,d1
DATAREG
CHAR LF
rts
;-------------------------------------------------------------------------
LINKI:
move.w CODE,d0
btst #3,d0
bne.s UNLKI
FILL LINK
CHAR TAB
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR ","
CHAR "#"
GETWORD
bsr.w WORD2TEXT
CHAR LF
rts
UNLKI:
FILL UNLK
CHAR TAB
move.w CODE,d0
and.w #%0000000000000111,d0
move.w d0,d1
ADDRESSREG
CHAR LF
rts
;-------------------------------------------------------------------------
FROMCCRI:
move.w d0,d1
and.w #%0000000011000000,d1
cmp.w #%0000000011000000,d1
bne.s CLRI
FILL MOVE
CHAR "."
CHAR "w"
CHAR TAB
CHAR "c"
CHAR "c"
CHAR "r"
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
CLRI:
FILL CLR
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
TOCCRI:
move.w d0,d1
and.w #%0000000011000000,d1
cmp.w #%0000000011000000,d1
bne.s NEGINS
FILL MOVE
CHAR "."
CHAR "w"
CHAR TAB
move.w CODE,d0
SOURCE
CHAR ","
CHAR "c"
CHAR "c"
CHAR "r"
CHAR LF
rts
;---------------------------------------------------------------------------
NEGINS:
FILL NEG
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;---------------------------------------------------------------------------
FROMSRI:
move.w d0,d1
and.w #%0000000011000000,d1
cmp.w #%0000000011000000,d1
bne.s NEGXI
FILL MOVE
CHAR "."
CHAR "w"
CHAR TAB
CHAR "s"
CHAR "r"
CHAR ","
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
NEGXI:
FILL NEGX
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
TOSRI:
move.w d0,d1
and.w #%0000000011000000,d1
cmp.w #%0000000011000000,d1
bne.s NOTI
FILL MOVE
CHAR "."
CHAR "w"
CHAR TAB
move.w CODE,d0
SOURCE
CHAR ","
CHAR "s"
CHAR "r"
CHAR LF
rts
;-------------------------------------------------------------------------
NOTI:
FILL NOT
move.w CODE,d0
bsr.w GETSIZE
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
TRAPI:
FILL TRAP
CHAR TAB
CHAR "#"
move.w CODE,d0
and.w #%0000000000000111,d0
bsr.w BYTE2TEXT
CHAR LF
rts
;-------------------------------------------------------------------------
JSRI:
FILL JSR
bra.s JUMPCOMP
JMPI:
FILL JMP
JUMPCOMP:
CHAR TAB
move.w CODE,d0
SOURCE
CHAR LF
rts
;-------------------------------------------------------------------------
STOPI:
FILL STOP
CHAR TAB
GETWORD
CHAR "#"
bsr.w WORD2TEXT
CHAR LF
rts
;-------------------------------------------------------------------------
TRAPVI:
FILL TRAPV
CHAR LF
rts
;-------------------------------------------------------------------------
RTSI:
FILL RTS
CHAR LF
rts
;-------------------------------------------------------------------------
RTDI:
FILL RTD
CHAR TAB
GETWORD
CHAR "#"
bsr.w WORD2TEXT
CHAR LF
rts
;-------------------------------------------------------------------------
ILLEGALI:
FILL ILLEGAL
CHAR LF
rts
;-------------------------------------------------------------------------
RTRI:
FILL RTR
CHAR LF
rts
;-------------------------------------------------------------------------
RTEI:
FILL RTE
CHAR LF
rts
;-------------------------------------------------------------------------
NOPI:
FILL NOP
CHAR LF
rts
;-------------------------------------------------------------------------
RESETI:
FILL RESET
CHAR LF
rts
;=========================================================================
GETSIZE:
move.w d0,d1
and.w #%0000000011000000,d1
lsr.w #5,d1
clr.w SIZE
cmp.w #4,d1
blt.s OKSIZE
move.w #1,SIZE
OKSIZE:
lea SIZES,a1
lea (a1,d1.w),a1
move.b (a1)+,(a5)+
move.b (a1),(a5)+
rts
;=========================================================================
MODEREGISTER: ; Mode (d0) ... Register (d1)
lsl.w #2,d0
lea MODES,a0
lea (a0,d0.w),a0
move.l (a0),a0
jmp (a0)
;-------------------------------------------------------------------------
DATADIRECT:
DATAREG
rts
;-------------------------------------------------------------------------
ADDRESSDIRECT:
ADDRESSREG
rts
;-------------------------------------------------------------------------
ADDRESSINDIRECT:
CHAR "("
ADDRESSREG
CHAR ")"
rts
;-------------------------------------------------------------------------
ADDRESSINPOST:
CHAR "("
ADDRESSREG
CHAR ")"
CHAR "+"
rts
;-------------------------------------------------------------------------
ADDRESSINPRE:
CHAR "-"
CHAR "("
ADDRESSREG
CHAR ")"
rts
;-------------------------------------------------------------------------
ADDRESSINDIS:
GETWORD
tst.w d0
bge.s USEHEX
move.l d1,-(a7)
CHAR "-"
neg.w d0
bsr.s HEX2DEC
move.l (a7)+,d1
bra.s COMPAI
USEHEX:
move.l d1,-(a7)
bsr.w WORD2TEXT
move.l (a7)+,d1
COMPAI:
bsr.s ADDRESSINDIRECT
rts
HEX2DEC:
move.l a5,a4
lea 5(a4),a4
moveq #4,d7
FIRSTNUM:
divu #10,d0
swap d0
add.b #'0',d0
move.b d0,-(a4)
clr.w d0
swap d0
dbf d7,FIRSTNUM
move.w #3,d6
LZERO:
cmp.b #'0',(a5)
bne.s DONEH2D
move.l a5,a3
lea 1(a3),a4
move.w d6,d7
COPYNUM:
move.b (a4)+,(a3)+
dbf d7,COPYNUM
dbf d6,LZERO
DONEH2D:
addq.w #2,d6
lea (a5,d6.w),a5
rts
;-------------------------------------------------------------------------
ADDRESSINIDX:
GETWORD
movem.l d0/d1,-(a7)
bsr.w BYTE2TEXT
movem.l (a7)+,d0/d1
CHAR "("
ADDRESSREG
CHAR ","
move.w d0,d1
and.w #$f000,d1
and.w #$0f00,d0
rol.w #4,d1
lsr.w #8,d0
btst #3,d1
beq.s IDXDATA
bclr #3,d1
ADDRESSREG
bra.s SIZEIDX
IDXDATA:
DATAREG
SIZEIDX:
CHAR "."
CHAR "w"
btst #3,d0
beq.s DOIDX
lea -1(a5),a5
CHAR "l"
DOIDX:
CHAR ")"
rts
;-------------------------------------------------------------------------
OTHERMODES:
lsl.w #2,d1
lea SUBMODES,a0
lea (a0,d1.w),a0
move.l (a0),a0
jmp (a0)
;-------------------------------------------------------------------------
ABSSHORT:
GETWORD
bsr.w WORD2TEXT
CHAR "."
CHAR "w"
rts
;-------------------------------------------------------------------------
ABSLONG:
GETLONG
bsr.w LONG2TEXT
rts
;-------------------------------------------------------------------------
PCDIS:
GETWORD
ext.l d0
add.l a6,d0
subq.l #$2,d0
bsr.l LONG2TEXT
CHAR "("
FILL PCT
CHAR ")"
rts
;-------------------------------------------------------------------------
PCIDX:
GETWORD
move.w d0,d1
and.w #$00ff,d0
ext.w d0
ext.l d0
add.l a6,d0
subq.l #$2,d0
move.l d1,-(a7)
bsr.l LONG2TEXT
move.l (a7)+,d1
CHAR "("
FILL PCT
CHAR ","
moveq #0,d0
move.w d1,d0
and.w #$f000,d1
and.w #$0f00,d0
rol.w #4,d1
lsr.w #8,d0
btst #3,d1
beq.s PCDATA
bclr #3,d1
ADDRESSREG
bra.s SIZEPC
PCDATA:
DATAREG
SIZEPC:
CHAR "."
CHAR "w"
btst #3,d0
beq.s DOPC
lea -1(a5),a5
CHAR "l"
DOPC:
CHAR ")"
rts
;-------------------------------------------------------------------------
IMM_SR_CCR:
tst.w ISC
beq.s IMMIDIATE
cmp.w #1,ISC
beq.s SMSR
SMCCR:
FILL CCRT
rts
SMSR:
FILL SRT
rts
;-------------------------------------------------------------------------
IMMIDIATE:
CHAR "#"
tst.w SIZE
bne.s IMMLONG
IMMWORD:
GETWORD
bsr.l WORD2TEXT
rts
IMMLONG:
GETLONG
bsr.l LONG2TEXT
rts
;-------------------------------------------------------------------------
BYTE2TEXT:
btst #7,d0
beq.s PLUSSB
CHAR "-"
neg.w d0
and.w #$00ff,d0
PLUSSB:
CHAR "$"
moveq #1,d4
move.w #$00f0,d6
move.w #1,d7
B2LOOP:
move.w d0,d1
and.w d6,d1
moveq #0,d5
B2SHIFT:
cmp.w d5,d7
beq.s B2DONE
lsr.w #4,d1
addq.w #1,d5
bra.s B2SHIFT
B2DONE:
tst.w d4
beq.s B2IGNORE
tst.b d1
beq.s B2CONT
moveq #0,d4
B2IGNORE:
bsr.w INSTEXT
B2CONT:
lsr.w #4,d6
dbf d7,B2LOOP
cmp.b #'$',-1(a5)
bne.s OKBT
move.b #'0',(a5)+
OKBT:
rts
;-------------------------------------------------------------------------
WORD2TEXT:
CHAR "$"
moveq #1,d4
move.w #$f000,d6
move.w #3,d7
W2LOOP:
move.w d0,d1
and.w d6,d1
moveq #0,d5
W2SHIFT:
cmp.w d5,d7
beq.s W2DONE
lsr.w #4,d1
addq.w #1,d5
bra.s W2SHIFT
W2DONE:
tst.w d4
beq.s W2IGNORE
tst.b d1
beq.s W2CONT
moveq #0,d4
W2IGNORE:
bsr.s INSTEXT
W2CONT:
lsr.w #4,d6
dbf d7,W2LOOP
cmp.b #'$',-1(a5)
bne.s OKWT
move.b #'0',(a5)+
OKWT:
rts
;-------------------------------------------------------------------------
LONG2TEXT:
CHAR "$"
moveq #1,d4
move.l #$f0000000,d6
move.w #7,d7
L2LOOP:
move.l d0,d1
and.l d6,d1
moveq #0,d5
L2SHIFT:
cmp.w d5,d7
beq.s L2DONE
lsr.l #4,d1
addq.w #1,d5
bra.s L2SHIFT
L2DONE:
tst.w d4
beq.s L2IGNORE
tst.b d1
beq.s L2CONT
moveq #0,d4
L2IGNORE:
bsr.s INSTEXT
L2CONT:
lsr.l #4,d6
dbf d7,L2LOOP
cmp.b #'$',-1(a5)
bne.s OKLT
move.b #'0',(a5)+
OKLT:
rts
;-------------------------------------------------------------------------
INSTEXT:
cmp.b #$9,d1
bgt.s HEX
add.b #'0',d1
move.b d1,(a5)+
rts
HEX:
add.b #87,d1
move.b d1,(a5)+
rts
;-------------------------------------------------------------------------
section Datafield,data
POINTER: dc.l $40000
LINE: blk.b 80,0
;--
SET: dc.w 0
CODE: dc.w 0
GROUPS:
dc.l BMMI ; 0 Bit Manip./MOVEP/Immidiate
dc.l MOVEI ; 1 Move Byte
dc.l MOVEI ; 2 Move Long
dc.l MOVEI ; 3 Move Word
dc.l MISC ; 4 Miscellanious
dc.l ASSDB ; 5 ADDQ/SUBQ/Scc/DBcc
dc.l BCCI ; 6 Branching (Bcc)
dc.l MOVEQI ; 7 MoveQ
dc.l ORDIS ; 8 OR/DIV/SBCD
dc.l SUBINS ; 9 SUB/SUBX
dc.l LINEAI ; a LINE_A
dc.l CMPEOR ; b CMP/EOR
dc.l AMAE ; c AND/MULU/MULS/ABCD/EXG
dc.l ADDINS ; d ADD/ADDX
dc.l SHIFTI ; e Shifting
dc.l LINEFI ; f LINE_F
;------------------------------------------------------------------------
MODES:
dc.l DATADIRECT
dc.l ADDRESSDIRECT
dc.l ADDRESSINDIRECT
dc.l ADDRESSINPOST
dc.l ADDRESSINPRE
dc.l ADDRESSINDIS
dc.l ADDRESSINIDX
dc.l OTHERMODES
SUBMODES:
dc.l ABSSHORT
dc.l ABSLONG
dc.l PCDIS
dc.l PCIDX
dc.l IMM_SR_CCR
ISC: dc.w 0 ; 0 = Immidiate
; 1 = SR
; 2 = CCR
SIZE: dc.w 0 ; 0 = Word
; 1 = Longword
;------------------------------------------------------------------------
PCT: dc.b "pc",0
SRT: dc.b "sr",0
CCRT: dc.b "ccr",0
BYTE: dc.b ".b",0
WORD: dc.b ".w",0
LONG: dc.b ".l",0
SIZES:
dc.b ".b"
dc.b ".w"
dc.b ".l"
dc.b ".w"
DATAS:
dc.b "d0"
dc.b "d1"
dc.b "d2"
dc.b "d3"
dc.b "d4"
dc.b "d5"
dc.b "d6"
dc.b "d7"
ADDS:
dc.b "a0"
dc.b "a1"
dc.b "a2"
dc.b "a3"
dc.b "a4"
dc.b "a5"
dc.b "a6"
dc.b "a7"
;--
BRANCHES:
dc.b "ra"
dc.b "sr"
dc.b "hi"
dc.b "ls"
dc.b "cc"
dc.b "cs"
dc.b "ne"
dc.b "eq"
dc.b "vc"
dc.b "vs"
dc.b "pl"
dc.b "mi"
dc.b "ge"
dc.b "lt"
dc.b "gt"
dc.b "le"
even
SHIFTS:
dc.l ASR
dc.l ASL
dc.l LSR
dc.l LSL
dc.l ROXR
dc.l ROXL
dc.l ROR
dc.l ROL
DECLARE: dc.b "dc.w",0
ASR: dc.b "asr",0
ASL: dc.b "asl",0
LSR: dc.b "lsr",0
LSL: dc.b "lsl",0
ROXR: dc.b "roxr",0
ROXL: dc.b "roxl",0
ROR: dc.b "ror",0
ROL: dc.b "rol",0
BTST: dc.b "btst"
BCHG: dc.b "bchg"
BCLR: dc.b "bclr"
BSET: dc.b "bset"
LINEA: dc.b "line_a",0
LINEF: dc.b "line_f",0
ABCD: dc.b "abcd",0
ADD: dc.b "add",0
ADDQ: dc.b "addq",0
ADDX: dc.b "addx",0
AND: dc.b "and",0
CLR: dc.b "clr",0
CMP: dc.b "cmp",0
CMPM: dc.b "cmpm",0
DIV: dc.b "div",0
EOR: dc.b "eor",0
EXG: dc.b "exg",0
ILLEGAL: dc.b "illegal",0
MOVE: dc.b "move",0
MOVEC: dc.b "movec",0
MOVEQ: dc.b "moveq",0
MOVES: dc.b "moves",0
MUL: dc.b "mul",0
NEG: dc.b "neg",0
NEGX: dc.b "negx",0
NOP: dc.b "nop",0
NOT: dc.b "not",0
OR: dc.b "or",0
RESET: dc.b "reset",0
RTD: dc.b "rtd",0
RTE: dc.b "rte",0
RTR: dc.b "rtr",0
RTS: dc.b "rts",0
SBCD: dc.b "sbcd",0
SUB: dc.b "sub",0
SUBX: dc.b "subx",0
SUBQ: dc.b "subq",0
TRAP: dc.b "trap",0
TRAPV: dc.b "trapv",0
JSR: dc.b "jsr",0
JMP: dc.b "jmp",0
CHK: dc.b "chk.w",0
LEA: dc.b "lea",0
PEA: dc.b "pea",0
STOP: dc.b "stop",0
LINK: dc.b "link",0
UNLK: dc.b "unlk",0
EXTW: dc.b "ext.w",0
EXTL: dc.b "ext.l",0
SWAP: dc.b "swap",0
TAS: dc.b "tas",0
TST: dc.b "tst",0
NBCD: dc.b "nbcd",0
MOVEM: dc.b "movem",0
MOVEP: dc.b "movep",0
even
BUFPTR: dc.l BUFFER
BUFFER: blk.b [80*256],0
E:
;-----------------------------------------------------------------------
--
Morten Amundsen | mortena@ifi.uio.no | "Ja til EF"
University Of Oslo, Institute Of Informatics
"It's Not What You Got That Counts, But Where You Stick It."